#理解管道的生产者与消费者
from multiprocessing import Pipe, Process
import time

def mark(pipe):
    #接受参数
    output_p, input_p = pipe
    print("mark方法内部调用input_p.close()")
    #消费者（子进程）此实例只接收，所以把输入关闭
    input_p.close()

    while True:
        try:
            item = output_p.recv()
        except EOFError:
            print("报错了")
            break
        print(item)
        time.sleep(1)
    print("mark执行完成")


if __name__ == "__main__":
    #必须在多进程创建之前，创建管道,该管道是双向的
    (output_p, input_p) = Pipe()#创建管道
    #创建一个进程，并把管道两端都作为参数传递过去
    p = Process(target=mark, args=((output_p, input_p),))
    #启动进程
    p.start()
    #生产者（主进程）此实例只输入，所以关闭输出（接收端）
    output_p.close()

    for item in list(range(5)):
        input_p.send(item)
    print("主方法内部调用input_p.close()()")
    #关闭生产者（主进程）的输入端
    input_p.close()


